import { ComponentInfoType, ComponentsStateType } from "./index";

// 删除组件计算当前选中的是哪个
export function getNextSelectedId(
  fe_id: string,
  componentList: Array<ComponentInfoType>
) {
  // 过滤掉隐藏的，只看显示的
  const visibleComponentList = componentList.filter((c) => !c.isHidden);
  const index = visibleComponentList.findIndex((c) => c.fe_id === fe_id);
  if (index < 0) return "";

  // 重新计算selectedId
  let newSelectedId = "";
  const length = visibleComponentList.length;
  if (length <= 1) {
    // 就只有一个组件，删了就没了
    newSelectedId = "";
  } else {
    //组件长度>1
    if (index + 1 === length) {
      // 要删除最后面一个组件
      newSelectedId = visibleComponentList[index - 1].fe_id;
    } else {
      // 要删除的不是最后一个，删除以后，选中下一个
      newSelectedId = visibleComponentList[index + 1].fe_id;
    }
  }
  return newSelectedId;
}

/**
 *
 * @param draft  state draft
 * @param newComponent 新组建
 */
export function insertNewComponent(
  draft: ComponentsStateType,
  newComponent: ComponentInfoType
) {
  const { selectedId, componentList } = draft;
  const index = componentList.findIndex((c) => c.fe_id === selectedId);
  if (index < 0) {
    // 未选中任何组件
    draft.componentList.push(newComponent);
  } else {
    // 选中了组件,插入到index后面
    draft.componentList.splice(index + 1, 0, newComponent);
  }
  draft.selectedId = newComponent.fe_id; // 重新选中新增的组件
}
